from flask import Flask, jsonify, request
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

# 读取数据库里的所有图书，此处使用模拟数据进行测试
books = [
    {"id": 1, "title": "西游记", "author": "吴承恩"},
    {"id": 2, "title": "三国演义", "author": "罗贯中"},
    {"id": 3, "title": "水浒传", "author": "施耐庵"},
    {"id": 4, "title": "红楼梦", "author": "曹雪芹"}
]


@app.route('/books', methods=['GET'])
def get_books():
    global books
    return jsonify(books)


@app.route('/books/<int:id>', methods=['GET'])
def get_book_by_id(id):
    # 从数据库里查找指定图书，此处使用模拟数据进行查找
    global books
    book = next((b for b in books if b["id"] == id), None)
    # 如果找到了，返回JSON格式数据
    if book:
        return jsonify(book)
    else:  # 如果没有找到，返回错误信息和404状态码
        return jsonify({"message": "未找到"}), 404


@app.route('/books', methods=['POST'])
def add_book():
    if request.method == 'OPTIONS':
        return '', 204
    # 从请求对象中获取JSON数据
    data = request.json
    if not data or "title" not in data or "author" not in data:
        return jsonify({"message": "缺少必要信息"}), 400
    # 创建新的图书字典
    max_id = max(books, key=lambda x: x['id'])['id']  # 使用 max() 函数获取最大的 id 值
    new_book = {
        "id": max_id + 1,
        "title": data["title"],
        "author": data["author"]
    }
    books.append(new_book)
    # 返回成功信息
    return jsonify({"message": "添加成功"}), 201


@app.route('/books/<int:id>', methods=['PUT'])
def update_book(id):
    # 从请求对象中获取JSON数据
    data = request.json
    # 从数据库里查找要修改的图书是否存在，此处使用模拟数据进行查找
    book = next((b for b in books if b["id"] == id), None)
    # 如果找到了，进行更新，并进行数据库保存，此处采用打印模拟
    if book:
        book.update(data)
        print(book)
        return jsonify({"message": "修改成功"}), 200
    else:  # 要修改的图书不存在，返回404错误和信息
        return jsonify({"message": "未找到"}), 404


@app.route('/books/<int:id>', methods=['DELETE'])
def delete_book(id):
    # 从数据库里查找要删除的图书是否存在，此处使用模拟数据进行查找
    book = next((b for b in books if b["id"] == id), None)
    # 如果找到了，进行数据库的删除操作，此处打印模拟
    if book:
        books.remove(book)
        return '', 204  # 删除成功，返回204，不需要信息
    else:  # 要删除的图书不存在，返回404错误和信息
        return jsonify({"message": "未找到"}), 404


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)
